package com.ikun.hospayservice.utils;

import com.ikun.common.entity.Convention;
import com.ikun.hospayservice.feign.SchedulingServiceFeignClient;
import com.ikun.hospayservice.feign.UserServiceFeignClient;
import com.ikun.hospayservice.pojo.AliPay;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.UUID;

/**
 * @author sun12
 */
@Component
public class ProcessOrdersUtil {

     /*
      前台传来部分预约信息，需要将预约状态改为等待（没有订单状态字段，套用预约状态）
      如果用户支付，则不改变状态，同时将预约医生的余号 -1
      如果用户未支付，则将预约状态修改为取消， 将预约医生的余号 +1
     */

    /**
     * 余号 加减 方法接口
     */
    @Resource
    private SchedulingServiceFeignClient schedulingClient;

    /**
     * 订单 创建、修改、查询 方法接口
     */
    @Resource
    private UserServiceFeignClient userClient;

    /**
     * 创建支付宝订单对象方法
     */
    public AliPay createAliPayOrder(Convention convention) {
        AliPay aliPay = new AliPay();
        //判断是否有 traceNo
        if (convention.getTradeNo() == null || "".equals(convention.getTradeNo())) {
            // 生成新的 TraceNo
            String generatedTraceNo = generateTraceNo();
            convention.setTradeNo(generatedTraceNo);
        }
        aliPay.setTraceNo(convention.getTradeNo());
        aliPay.setTotalAmount(convention.getMoney());
        aliPay.setSubject("挂号预约");
        return aliPay;
    }


    /**
     * 生成订单号
     *
     * @return
     */
    private String generateTraceNo() {
        // 使用 UUID.randomUUID() 生成一个唯一的 TraceNo
        return UUID.randomUUID().toString();
    }


    /**
     * 增加余号数
     */
    public void addSurplus(Convention convention) {
        schedulingClient.addSurplus(convention.getDate(), convention.getDocId(), convention.getTimeId());
    }

    /**
     * 减少余号数
     */
    public void reduceSurplus(Convention convention) {
        schedulingClient.reduceSurplus(convention.getDate(), convention.getDocId(), convention.getTimeId());
    }


    /**
     * 创建预约信息方法
     */
    public void createOrder(Convention convention) {
        convention.setState(0);
        convention.setDel(0);
        convention.setCreateTime(String.valueOf(LocalDateTime.now()));
        userClient.makeOrder(convention);
    }

    /**
     * 修改预约信息方法
     */
    public void updateOrder(Convention convention) {
        convention.setState(2);
        userClient.changeOrderStatus(convention);
    }

    /**
     * 查詢预约信息方法
     */
    public void queryOrder(Convention convention) {

    }


}
